GDIR=../../..

## Get files, includes and libraries needed for GIMI
include $(GDIR)/GIMI/Makefile.gimi

CC=gcc
CXX=g++
LD=g++
CFLAGS=-Wall $(DEBUG) $(DEFINITIONS) $(CINCLUDES) $(CMISCFLAGS)
CPPFLAGS=-Wall $(DEBUG) $(EXCEPTIONS) $(CPPINCLUDES) $(DEFINITIONS) $(CPPMISCFLAGS)
LDFLAGS=
DEBUG=-O0 -g3
CMISCFLAGS=-fPIC
CPPMISCFLAGS=-Weffc++ -Wextra -DGIMI_CLIENT_API=20000 -fPIC
DEFINITIONS=-DLINUX_OS
EXCEPTIONS=-fexceptions
GIMIDIR=$(GDIR)/GIMI

CINCLUDES=$(INCGIMI) `python-config --includes`
CPPINCLUDES=$(INCGIMI) `python-config --includes`

LIBS=$(LIBSGIMI)

SRCSC=
SRCSCPP=

SRCGIMITEST=gimitest.cpp
SRCSOCKETTEST=sockettest.cpp

## Construct final lists of CPP and C objects
OBJSC=$(CGIMI:.c=.o) $(SRCSC:.c=.o)
OBJSCPP=$(CPPGIMI:.cpp=.opp) $(SRCSCPP:.cpp=.opp)

OBJGIMITEST=$(SRCGIMITEST:.cpp=.opp)
OBJSOCKETTEST=$(SRCSOCKETTEST:.cpp=.opp)

## Define compiles and links
COMPILEC=$(CC) $(CFLAGS) -c
COMPILECPP=$(CXX) $(CPPFLAGS) -c
LINK=$(LD) $(LDFLAGS) $(LIBS)

.PHONY: all clean


##############################################
all:	GIMI_Python
##############################################


.PHONY: GIMI_Python
GIMI_Python: lib $(OBJSC) $(OBJSCPP) \
	     $(GIMIDIR)/gimi.i \
	     $(GIMIDIR)/gimimessage.i \
	     $(GIMIDIR)/datatypedefinitions.i \
	     $(GIMIDIR)/gimiprotocoltypes.i \
	     datatypedefines_Python \
	     gimiprotocoltypes_Python
	mkdir -p ./lib
#	rm -f _gimi.so
#	swig -c++ -python $(INCGIMI) -o gimiprotocoltypes_wrap.cpp gimiprotocoltypes.i
#	$(COMPILECPP) -fPIC -I /usr/include/python2.5 \
#		      -c gimiprotocoltypes_wrap.cpp -o gimiprotocoltypes_wrap.opp 
#	$(LINK) -shared -fPIC -o _gimiprotocoltypes.so $(OBJSC) $(OBJSCPP)\
#		      gimiprotocoltypes_wrap.opp
#	swig -c++ -python $(INCGIMI) -o datatypedefins_wrap.cpp datatypedefinitions.i
#	$(COMPILECPP) -fPIC -I /usr/include/python2.5 \
#		      -c datatypedefins_wrap.cpp -o datatypedefins_wrap.opp 
#	$(LINK) -shared -fPIC -o _datatypedefins.so $(OBJSC) $(OBJSCPP)\
#		      datatypedefins_wrap.opp
	swig -c++ -python $(INCGIMI) -o gimimessage_wrap.cpp $(GIMIDIR)/gimimessage.i
	$(COMPILECPP) -fPIC  \
		      -c gimimessage_wrap.cpp -o gimimessage_wrap.opp 
	$(LINK) -shared -fPIC -o _gimimessage.so $(OBJSC) $(OBJSCPP)\
		      gimimessage_wrap.opp
	swig -c++ -python $(INCGIMI) -o gimi_wrap.cpp $(GIMIDIR)/gimi.i
	$(COMPILECPP) -fPIC  \
		      -c gimi_wrap.cpp -o gimi_wrap.opp 
	$(LINK) -shared -fPIC -o _gimi.so $(OBJSC) $(OBJSCPP)\
        gimi_wrap.opp
	mv -v _gimi.so gimi.py ./lib
	mv -v _gimimessage.so gimimessage.py ./lib
##############################################

.PHONY: datatypedefines_Python
datatypedefines_Python: lib $(GIMIDIR)/datatypedefinitions.i
	swig -c++ -python $(INCGIMI) -o datatypedefinitions_wrap.cpp $(GIMIDIR)/datatypedefinitions.i
	$(COMPILECPP) -fPIC \
		      -c datatypedefinitions_wrap.cpp -o datatypedefinitions_wrap.opp 
	$(LINK) -shared -fPIC -o _datatypedefinitions.so $(OBJSC) $(OBJSCPP)\
		      datatypedefinitions_wrap.opp
	mv -v _datatypedefinitions.so datatypedefinitions.py ./lib
##############################################

.PHONY: gimiprotocoltypes_Python
gimiprotocoltypes_Python: lib $(GIMIDIR)/gimiprotocoltypes.i
	swig -c++ -python $(INCGIMI) -o gimiprotocoltypes_wrap.cpp $(GIMIDIR)/gimiprotocoltypes.i
	$(COMPILECPP) -fPIC \
		      -c gimiprotocoltypes_wrap.cpp -o gimiprotocoltypes_wrap.opp 
	$(LINK) -shared -fPIC -o _gimiprotocoltypes.so $(OBJSC) $(OBJSCPP)\
		      gimiprotocoltypes_wrap.opp
	mv -v _gimiprotocoltypes.so gimiprotocoltypes.py ./lib
##############################################
lib: 
	mkdir -p ./lib
##############################################

clean:
	rm -f $(OBJSC) $(OBJSCPP) *~ *.d *.dpp
	rm -f *.opp
	rm -f *.cpp
	rm -rf ./lib

## Compile rule for all .o (.c) file
%.o:    %.c
	@$(COMPILEC) -o $@ $<
	@echo "      [CC] $<"

## Compile rule for all .opp (.cpp) files
%.opp:	%.cpp
	@$(COMPILECPP) -o $@ $<
	@echo "      [CXX] $<"
